from fastapi import FastAPI
from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime
import time

# 1. 初始化FastAPI应用
app = FastAPI()

# 2. 初始化APScheduler调度器（使用后台线程执行任务）
scheduler = BackgroundScheduler()


# 3. 定义定时任务函数（示例：打印当前时间）
def print_current_time():
    # ilist = r.lrange('idcardlist',0,10)
    # for i in ilist:
    #     mes =bdapi.imagecode(i)
    #     print(mes)

    print(f"定时任务执行：当前时间")


def heavy_task():
    """示例：耗时任务（演示调度器的异步执行）"""
    print("开始执行耗时任务...")
    time.sleep(3)  # 模拟耗时操作
    print("耗时任务执行完成")


# 4. 向调度器添加任务（配置触发规则）
def add_jobs():
    # 任务1：每隔5秒执行一次（interval触发）
    scheduler.add_job(
        func=print_current_time,
        trigger="interval",  # 间隔触发
        seconds=1,  # 间隔5秒
        id="time_printer"  # 任务唯一ID（用于后续操作，如删除）
    )

    # 任务2：每天12:30执行（cron触发，类似Linux的crontab）
    # scheduler.add_job(
    #     func=heavy_task,
    #     trigger="cron",  # CRON表达式触发
    #     hour=12,
    #     minute=30,
    #     id="daily_task"
    # )

    # 任务3：在特定时间执行一次（date触发）
    # scheduler.add_job(
    #     func=print_current_time,
    #     trigger="date",  # 特定时间触发
    #     run_date=datetime(2025, 12, 31, 23, 59, 59),  # 2025年12月31日23:59:59
    #     id="specific_time_task"
    # )


# 5. 利用FastAPI生命周期事件管理调度器
@app.on_event("startup")
def startup_event():
    """应用启动时，启动调度器并添加任务"""
    add_jobs()
    scheduler.start()
    print("调度器已启动")


@app.on_event("shutdown")
def shutdown_event():
    """应用关闭时，关闭调度器"""
    scheduler.shutdown()
    print("调度器已关闭")


# 测试接口（可选）
@app.get("/")
def read_root():
    return {"message": "FastAPI定时任务示例运行中"}


import uvicorn

if __name__ == '__main__':
    uvicorn.run("t1:app", host="127.0.0.1", port=8001, reload=True)